package org.jeecg.modules.api.xxApi.vo;


import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
import org.jeecg.modules.api.xxApi.validate.EnumValue;
import org.jeecg.modules.xxgx.djgl.entity.cezs.Cezs;
import org.jeecg.modules.xxgx.djgl.entity.tdyw.*;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@ApiModel(value = "XxApiFpkjParam对象", description = "销项管理-发票开具")
public class XxApiFpkjParam implements Serializable {

    @ApiModelProperty(value = "开票申请流水号")
    @NotBlank(message = "开票申请流水号不可为空")
    private String fpsqlsh;

    @ApiModelProperty(value = "业务单据编号", hidden = true)
    private String ywdjbh;

    @ApiModelProperty(value = "开票终端代码")
    @NotBlank(message = "开票终端代码不可为空")
    private String kpzddm;

    @ApiModelProperty(value = "数据类型",hidden = true)
    private String sjlx = "jkkp";

    @ApiModelProperty(value = "数据来源",hidden = true)
    private String sjly = "sglr";

    @ApiModelProperty(value = "所属业态", hidden = true)
    private String sjyt;

    @ApiModelProperty(value = "征收方式 0普通征税1减按征税2差额开票3全额开票")
    @EnumValue(values = {"0", "1", "2", "3"}, message = "征收方式不合法")
    private String zsfs = "0";

    @ApiModelProperty(value = "纸质发票标志")
    private String zzfpbz = "0";

    @ApiModelProperty(value = "部门代码")
    private String bmdm;

    @ApiModelProperty(value = "开票类型 0正数发票 1负数发票 3作废发票")
    @NotBlank(message = "开票类型不可为空")
    @EnumValue(values = {"0", "1", "3"}, message = "开票类型不合法")
    private String kplx;

    @ApiModelProperty(value = "处理方式 0：ywdjbh重复时返回已开发票信息 1：返回报错")
    private String clfs = "1";

    @ApiModelProperty(value = "客户名称")
    @NotBlank(message = "客户名称不可为空")
    private String khmc;

    @ApiModelProperty(value = "客户税号")
    private String khsh;

    @ApiModelProperty(value = "客户地址")
    private String khdz;

    @ApiModelProperty(value = "客户电话")
    private String khdh;

    @ApiModelProperty(value = "客户地址电话", hidden = true)
    private String khdzdh;

    @ApiModelProperty(value = "客户开户银行")
    private String khyh;

    @ApiModelProperty(value = "客户银行卡号")
    private String khzh;

    @ApiModelProperty(value = "客户开户银行卡号", hidden = true)
    private String khyhzh;

    @ApiModelProperty(value = "客户邮箱")
    private String khlxyx;

    @ApiModelProperty(value = "客户手机")
    private String khlxfs;

    @ApiModelProperty(value = "发票类型 004-专票 007-普票 025-卷票 026-电子普票 028-电子专票 01-全电专 02-全电普")
    @NotBlank(message = "开票类型不可为空")
    @EnumValue(values = {"004", "007", "025", "026", "028","01", "02"}, message = "发票类型代码不合法")
    private String fplxdm;

    @ApiModelProperty(value = "特殊票种 00正常发票01农产品销售02农产品收购06抵扣通行费07其他通行费08成品油销售12机动车")
    @NotBlank(message = "特殊票种不能为空")
    @EnumValue(values = {"00", "01", "02", "06", "07", "08", "12"}, message = "特殊票种不合法")
    private String tspz;

    @ApiModelProperty(value = "特定要素类型代码 03建筑服务04货物运输05不动产销售06不动产租赁09旅客运输")
    private String tdyslxdm;

    @ApiModelProperty(value = "销方名称")
    @NotBlank(message = "销方名称不可为空")
    private String xfmc;

    @ApiModelProperty(value = "销方税号")
    @NotBlank(message = "销方税号不可为空")
    private String xfsh;

    @ApiModelProperty(value = "销方地址")
    @NotBlank(message = "销方地址不可为空")
    private String xfdz;

    @ApiModelProperty(value = "销方电话")
    @NotBlank(message = "销方电话不可为空")
    private String xfdh;

    @ApiModelProperty(value = "销方地址电话", hidden = true)
    private String xfdzdh;

    @ApiModelProperty(value = "销方开户银行")
    @NotBlank(message = "销方开户银行不可为空")
    private String xfyh;

    @ApiModelProperty(value = "销方银行账号")
    @NotBlank(message = "销方银行账号不可为空")
    private String xfzh;

    @ApiModelProperty(value = "销方开户银行账号", hidden = true)
    private String xfyhzh;

    @ApiModelProperty(value = "开票人")
    @NotBlank(message = "开票人不可为空")
    private String kpr;

    @ApiModelProperty(value = "收款人")
    private String skr;

    @ApiModelProperty(value = "复核人")
    private String fhr;

    @ApiModelProperty(value = "备注")
    private String bz;

    @ApiModelProperty(value = "含税标志", hidden = true)
    private String hsbz = "0";

    @ApiModelProperty(value = "合计金额(不含税)")
    @NotNull(message = "合计金额(不含税)不能为空")
    private BigDecimal hjje;

    @ApiModelProperty(value = "税额")
    @NotNull(message = "税额不能为空")
    private BigDecimal hjse;

    @ApiModelProperty(value = "折扣金额")
    private BigDecimal zkje;

    @ApiModelProperty(value = "扣除额")
    private BigDecimal kce;

    @ApiModelProperty(value = "清单标志 0非清单 1清单 超过8行为清单票")
    @NotBlank(message = "清单标志不可为空")
    private String qdbz;

    @ApiModelProperty(value = "纸票票种代码")
    private String zpfppzdm;

    @ApiModelProperty(value = "纸质发票代码")
    private String zzfpdm;

    @ApiModelProperty(value = "纸质发票号码")
    private String zzfphm;

    @ApiModelProperty(value = "购方自然人标识 Y/N")
    private String gfzrrbs;

    @ApiModelProperty(value = "是否展示购方银行账号到备注里面 Y/N")
    private String sfzsgmfyhzh;

    @ApiModelProperty(value = "是否展示销方银行账号到备注里面 Y/N")
    private String sfzsxsfyhzh;

    @ApiModelProperty(value = "红字信息表/红字申请单编号")
    private String hzxxbbh;

    @ApiModelProperty(value = "原发票代码")
    private String yfpdm;

    @ApiModelProperty(value = "原发票号码")
    private String yfphm;

    @ApiModelProperty(value = "原单据编号")
    private String ydjbh;

    @ApiModelProperty(value = "红冲原因")
    private String hcyy;

    @Valid
    @ApiModelProperty(value = "商品明细")
    @NotEmpty(message = "明细数据不能为空")
    private List<XxApiFpkjMxParam> fpmxs;

    @ApiModelProperty(value = "特定业务--建筑服务")
    Jzfw tdywJzfw;

    /**
     * 特定业务--货物运输服务
     */
    @ApiModelProperty(value = "特定业务--货物运输服务")
    List<Hwysfwmx> tdywHwysfwList;

    /**
     * 特定业务--不动产销售
     */
    @ApiModelProperty(value = "特定业务--不动产销售")
    Bdcxsfw tdywBdcxs;
    /**
     * 特定业务--不动产经营租赁服务
     */
    @ApiModelProperty(value = "特定业务--不动产经营租赁服务")
    Bdcjyzlfw tdywBdcjyzlfw;

    /**
     * 特定业务--旅客运输服务
     */
    @ApiModelProperty(value = "特定业务--旅客运输服务")
    List<Lkysfwmx> tdywLkysfwList;

    /**
     * 差额征收数据明细
     */
    @ApiModelProperty(value = "差额征收数据明细")
    List<Cezs> cezsList;

    @ApiModelProperty(value = "附加要素明细")
    List<XxApiFpkjFjysMxParam> fjyslist;
}
